package com.buka.utils;

import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
import java.util.Date;
import java.util.Map;

/**
 * JWT工具类
 */
public class JwtUtils {

    public static String jiami(Map<String, ?> map){
        Date date = new Date();
        JwtBuilder jwtBuilder=Jwts.builder()
                .setId(IdWorker.get32UUID())
                .setExpiration(new Date(date.getTime()+(Long) map.get("timeout")))
                .setIssuedAt(date)
                .signWith(SignatureAlgorithm.HS256,map.get("signWith").toString());
        for (String key : map.keySet()) {
            if (key.equals("timeout")||key.equals("signWith")){
                continue;
            }
            jwtBuilder.claim(key,map.get(key));
        }
        return jwtBuilder.compact();
    }
//
//
//    //有效期为
//    public static final Long JWT_TTL = 3600000L;// 60 * 60 *1000  一个小时
//    //设置秘钥明文
//    public static final String JWT_KEY = "itcast";
//
//    /**
//     * 创建token
//     * @param id
//     * @param subject
//     * @param ttlMillis
//     * @return
//     */
//    public static String createJWT(String id, String subject, Long ttlMillis) {
//
//        SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
//        long nowMillis = System.currentTimeMillis();
//        Date now = new Date(nowMillis);
//        if(ttlMillis==null){
//            ttlMillis=JwtUtils.JWT_TTL;
//        }
//        long expMillis = nowMillis + ttlMillis;
//        Date expDate = new Date(expMillis);
//        SecretKey secretKey = generalKey();
//
//        JwtBuilder builder = Jwts.builder()
//                .setId(id)              //唯一的ID
//                .setSubject(subject)   // 主题  可以是JSON数据
//                .setIssuer("admin")     // 签发者
//                .setIssuedAt(now)      // 签发时间
//                .signWith(signatureAlgorithm, secretKey) //使用HS256对称加密算法签名, 第二个参数为秘钥
//                .setExpiration(expDate);// 设置过期时间
//        return builder.compact();
//    }
//
//    /**
//     * 生成加密后的秘钥 secretKey
//     * @return
//     */
//    public static SecretKey generalKey() {
//        byte[] encodedKey = Base64.getDecoder().decode(JwtUtils.JWT_KEY);
//        SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");
//        return key;
//    }
//
//
//    /**
//     * 解析
//     *
//     * @param jwt
//     * @return
//     * @throws Exception
//     */
//    public static Claims parseJWT(String jwt) throws Exception {
//        SecretKey secretKey = generalKey();
//        return Jwts.parser()
//                .setSigningKey(secretKey)
//                .parseClaimsJws(jwt)
//                .getBody();
//    }
}